Chuyển tới nội dung chính
Phiên bản: 8.0.0

Authentication

File: packages/skilldo/framework/src/Support/Auth.php

Namespace: SkillDo\Support\Auth

1. Auth là gì?

Authentication (Xác thực) là quá trình hệ thống nhận diện việc người dùng tiến hành đăng nhập, kiểm tra thông tin tài khoản hợp lệ, ghi nhớ session, cookies và trả về các thông tin đối tượng User đang thao tác.

Class SkillDo\Support\Auth của nền tảng cung cấp một tập hợp các phương thức tĩnh (Facade-like) vô cùng thân thiện giúp bạn thao tác với thông tin của người dùng hiện hành nhanh chóng mà không cần phải gọi qua DB liên tục, vì dữ liệu có cơ chế Cache & Session tối ưu.

2. Cách Gọi Thường Dùng

Vì các method của Auth được khai báo là tĩnh (static), bạn có thể gọi trực tiếp ở bất kỳ tệp Model, Controller, View hay Helper nào.

Ví dụ:

use SkillDo\Support\Auth;

if (Auth::check())
{
$userName = Auth::user()->username;
$userId = Auth::id();
}

3. Danh Sách Phương Thức

3.1 Xác thực người dùng

Auth::check

Method Auth::check Kiểm tra user đã đăng nhập hệ thống hay chưa nếu đã đăng nhập kết quả sẽ là true ngược lại là false

$isLogin = Auth::check()

Auth::user

Method Auth::user trả thông tin user đang đăng nhập nếu không có user đăng nhập method trả về một mãng rỗng

$user = Auth::user()

Auth::id

Method Auth::id trả id user đang đăng nhập nếu không có user đăng nhập method trả về 0

$userId = Auth::id();

Auth::login

Method Auth::login đăng nhập user được chỉ định vào hệ thống. Thành công trả về object User, thất bại trả về SKD_Error.

Credentials KeyTypeDescription
usernamestring
  • sử dụng username (mặc định)
  • sử dụng email (mặc định được bật — config cms.user_login)
  • sử dụng phone (mặc định tắt — thêm 'phone' vào config cms.user_login)
passwordstringmật khẩu
$credentials = [
'username' => 'my_username',
'password' => 'my_password',
]

$loginResult = Auth::login($credentials);

if(!is_skd_error($loginResult))
{
echo "login successful"
}
else
{
echo $loginResult->first();
}

Nếu gọi Auth::login() không truyền $credentials, hệ thống tự lấy username/password từ request hiện tại. Trong quá trình login các hook sau được phát: filter authenticate ($user, $username, $password — trả về SKD_Error để chặn), action skd_login (thành công) và skd_login_failed (thất bại). User có status khác public (pending/block) sẽ bị từ chối đăng nhập.

Auth::logout

Method Auth::logout tiền hành đăng xuất user hiện đang đăng nhập trong hệ thống (xóa session user, xóa cookie user_login, phát action user_logout)

Auth::logout();

Auth::setCookie

Method Auth::setCookie thiết lập phiên đăng nhập cho user được truyền vào: ghi cookie user_login (chứa username + remember_token, được ký HMAC-SHA256), ghi session và bind user vào container (app('user')). Dùng để đăng nhập user bằng code, hoặc làm mới thông tin user đang đăng nhập sau khi thay đổi dữ liệu

$user = Auth::user();
$user->firstname = 'Elon';
$user->lastname = 'Mệt';
$user->save();
Auth::setCookie($user); // app('user') từ giờ trả về thông tin mới

Auth::setCurrent

Method Auth::setCurrent đăng nhập trực tiếp một user object vào hệ thống không cần mật khẩu (kiểm tra status phải là public, sau đó gọi setCookie và phát action skd_login). Thành công trả về user, thất bại trả về SKD_Error

$user = \User::find(1);

$result = Auth::setCurrent($user);

if(!is_skd_error($result)) {
echo "login successful";
}

Auth::generatePassword

Method Auth::generatePassword tạo chuỗi hash mật khẩu bằng password_hash() — ưu tiên Argon2ID, fallback Bcrypt. Tham số $salt thứ 2 chỉ giữ lại để tương thích code cũ và không còn được sử dụng

$user = Auth::user();
$user->password = Auth::generatePassword('new_password');
$user->save();

Auth::passwordConfirm

Method Auth::passwordConfirm kiểm tra mật khẩu nhập vào có khớp với mật khẩu của user hay không. Tham số $user có thể bỏ trống — mặc định là user đang đăng nhập. Mật khẩu legacy (MD5 + salt) vẫn xác thực được và sẽ tự động migrate lên Argon2ID/Bcrypt sau lần xác thực thành công

$passwordConfirm = Auth::passwordConfirm('my_password', $user);

if($passwordConfirm)
{
echo "Password is correct";
}
else
{
echo "Password is incorrect";
}

Auth::loginByRemember

Method Auth::loginByRemember tự động đăng nhập lại user từ cookie user_login (remember token) nếu session đã hết hạn. Không áp dụng cho user root

Auth::loginByRemember();

3.2 Phân quyền người dùng

Auth::hasCap

Method Auth::hasCap kiểm tra user đang đăng nhập có quyền sử dụng chức năng không, nếu có quyền trả về true ngược lại là false

if(Auth::hasCap('edit_post')) {
//permission successfully
}

Auth::getCap

Method Auth::getCap trả về các quyền user đang đăng nhập có thể sử dụng

dd(Auth::getCap())
/**
"loggin_admin" => true
"switch_themes" => true
"edit_themes" => true
...
*/

Auth::getRole

Method Auth::getRole trả về key nhóm (chức vụ) của user đang đăng nhập

dd(Auth::getRole())
//["customer"]

Auth::getRoleName

Method Auth::getRoleName trả về tên nhóm (chức vụ) của user đang đăng nhập

dd(Auth::getRoleName())
//Khách hàng

Auth::setRole

Method Auth::setRole set user đang đăng nhập vào nhóm (chức vụ) mới (thay thế toàn bộ role hiện có, phát action set_user_role)

dd(Auth::setRole('administrator'))

Auth::addRole

Method Auth::addRole gán thêm một nhóm (chức vụ) cho user đang đăng nhập (giữ lại các role cũ)

Auth::addRole('seller');

Auth::isSupper

Method Auth::isSupper kiểm tra user đang đăng nhập có phải super admin hay không (dựa trên capability delete_users)

if(Auth::isSupper()) {
// User có quyền cao nhất
}